home *** CD-ROM | disk | FTP | other *** search
- #ifndef THINK_C
- #include <Types.h>
- #endif
-
- #include "sortdata.h"
- void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag);
-
- void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag)
- {
- long gap, index, select, *pindex, *pselect;
- Boolean swaped;
- gap = maxdata >> 1;
- while (gap > 0) {
- do {
- swaped = false;
- pindex = sortdata;
- select = gap;
- pselect = &sortdata[gap];
- for (index = 0; index < maxdata - gap; index++, pindex++, select++, pselect++) {
-
- if (*stopflag) {
- return;
- }
-
- if ((*cm)(index, select, *pindex, *pselect) > 0) {
- (*sw)(index, select, pindex, pselect);
- swaped = true;
- }
- }
- index = select - 1;
- pindex = pselect -1;
- select = index - gap;
- pselect = &sortdata[select];
-
- } while (swaped);
- gap >>= 1;
- }
- }
-